// 如果直接使用原生的写法，所有的数据操作都会在 onreadystatechange 里面做处理 非常麻烦

// 所以 通常会使用已经封装好的 Ajax 或者自行封装一个 request方法 用于处理 get 请求

function Request() {

  // 数据格式化的方法 转化为 user=admin&password=123456 格式
  const formate = function (data) {

    if (typeof data !== 'object') return data

    let arr = Object.entries(data)

    arr = arr.map(item => item.join('='))

    return arr.join('&')

  }

  // 请求方法的封装 使用 promise
  const request = function (methods, url, data) {

    return new Promise(function (res) {
      const xhr = new XMLHttpRequest()
      xhr.open(methods, url + formate(data))
      xhr.send(null)
      xhr.addEventListener('readystatechange', () => {
        if (xhr.readyState === 4) {
          if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {

            res(JSON.parse(xhr.responseText)) // 数据操作 转化为对象

          }
        }
      })
    })
  }

  // 导出 API
  this.request = request
}

// request('GET', url, data).then(res => console.log(res))